package com.Lubaichen.Wiki.controller;

import com.Lubaichen.Wiki.Pojo.Test;
import com.Lubaichen.Wiki.service.TestService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @author Lubaichen
 * @date 2022年02月27日 21:24
 */
@RestController
// @Controller : 返回的是页面，前后端分离基本用不到这个注解。
// @ResponseBody : 用来返回字符串或JSON对象，更多的是返回JSON对象。
public class TestController {
    private static final Logger LOG = LoggerFactory.getLogger(ControllerExceptionHandler.class);
    @Autowired
    private TestService testService;
    // 优先读配置文件，没有就用默认值
    @Value("${test.hello:TEST}") // 冒号后的是默认值，以免忘了在配置文件中配置test.hello，所以应该给它一个默认值。
    private String testHello;

    @Resource
    private RedisTemplate redisTemplate;

    /**
     * GET,POST,PUT,DELETE
     *
     * @return
     */
    // @RequestMapping : 表示这个接口支持所有的请求方式
    // @RequestMapping(value = "/hello", method = RequestMethod.GET)
    // @RequestMapping("/hello")
    // 405: 该访问请求不支持
    // 浏览器直接访问地址，发送的是GET请求
    @GetMapping("/hello")
    public String hello() {
        return "Hello World!" + testHello;
    }

    // Spring会自动映射name参数
    @PostMapping("/hello/post")
    public String helloPost(String name) {
        return "Hello World! Post," + name;
    }

    @GetMapping("/test/list")
    public List<Test> testList() {
        return testService.list();
    }

    @RequestMapping("/redis/set/{key}/{value}")
    public String set(@PathVariable Long key, @PathVariable String value) {
        redisTemplate.opsForValue().set(key, value, 3600, TimeUnit.SECONDS);
        LOG.info("key:{}, value:{}", key, value);
        return "success";
    }

    @RequestMapping("/redis/get/{key}")
    public Object get(@PathVariable Long key) {
        Object object = redisTemplate.opsForValue().get(key);
        LOG.info("key:{}, value:{}",key, object);
        return object;
    }

}
